Skip to content

Release v0.13.0#264

Open
tylerbutler-release-bot[bot] wants to merge 2 commits intomainfrom
release/next
Open

Release v0.13.0#264
tylerbutler-release-bot[bot] wants to merge 2 commits intomainfrom
release/next

Conversation

@tylerbutler-release-bot
Copy link
Copy Markdown
Contributor

@tylerbutler-release-bot tylerbutler-release-bot bot commented Apr 11, 2026

v0.13.0 - 2026-04-14

Features

Added

Multi-target file mappings in repoverlay.ccl

A source file can now map to multiple target paths using duplicate keys in the mappings section:

mappings = .editorconfig = .editorconfig .editorconfig = packages/frontend/.editorconfig

This copies the source file to every listed target. Single-value mappings continue to work as before. All targets are tracked in the overlay state file, so remove cleans up every copy.

Fixes

Fixed

Log warnings when .ccl state files fail to parse instead of silently skipping

Previously, corrupted or unparseable .ccl state files were silently ignored. Now repoverlay logs a warning message identifying the problematic file before skipping it, making it easier to diagnose configuration issues.

Save-source prompt duplicate-check now sees repo-local sources

prompt_save_source() loaded only global config when checking for duplicates, so it could prompt the user to save a source that was already configured at the repo level. The duplicate-check now loads the merged config (global + repo-local) while still writing saves to the global config file.

Command: library

Fixed

Surface file read errors in show_file_diff instead of silently treating as empty

Previously, if reading either the existing or overlay file failed in show_file_diff, the error was silently swallowed and the file was treated as empty. Now the function logs a warning and prints a user-visible warning message identifying the problematic file before returning early.

Validate overlay names reject path separators in release builds

OverlayName previously only checked for forward slashes via debug_assert, meaning invalid names with path separators (including backslashes) could slip through in release builds. Added OverlayName::try_new which returns an error for names containing / or \, and updated all user-input paths to use it.

Use atomic write-then-rename for state files to prevent corruption

State file writes previously used a non-atomic truncate-then-write pattern, which could leave corrupted or empty files if the process was interrupted mid-write. State files are now written to a temporary file in the same directory and atomically renamed into place using tempfile::NamedTempFile.

Command: apply

Fixed

Resolve three-part overlay references using repo-local sources

Three-part references like org/repo/overlay failed with "Overlay repository not configured" when the source was configured at the repo level via repoverlay source add. Repo-local sources in .repoverlay/config.ccl are now correctly loaded during resolution.

Match GitHub URLs against repo-local sources for overlay repo upgrade

When applying via a GitHub URL that matches a configured source, repoverlay upgrades to editable overlay repo mode. This matching now includes repo-local sources, not just global ones.

Command: create

Fixed

create --into library resolves library path relative to target repo instead of source

Previously, create --into library --source <path> placed the overlay into the source repo's library instead of the target repo's (cwd). Added --target parameter to the create command for explicit target specification, consistent with other commands like move and switch.

Command: move

Added

repoverlay move command for relocating overlays

Adds a new top-level move command that relocates an overlay's source files between locations while preserving applied state. Supports moving to the in-repo library (--to library), to a filesystem path (--to /path/to/dir), or renaming on move (--name).

The operation is interrupt-safe: files are copied to the destination, state is updated, symlinks are re-created pointing to the new location, then the source is deleted. If interrupted, the worst case is a duplicate that can be cleaned up manually.

Supports --force to overwrite existing destinations and --dry-run to preview changes.

@codecov
Copy link
Copy Markdown

codecov bot commented Apr 11, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@tylerbutler-release-bot tylerbutler-release-bot bot force-pushed the release/next branch 2 times, most recently from 3882e5d to 6180dfc Compare April 11, 2026 22:51
@tylerbutler-release-bot tylerbutler-release-bot bot changed the title Release v0.12.1 Release v0.13.0 Apr 11, 2026
@tylerbutler-release-bot tylerbutler-release-bot bot force-pushed the release/next branch 10 times, most recently from b1cafca to 6daab1b Compare April 13, 2026 23:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant